/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ejemplotiendaweb.controlador;

import ejb.datos.ProductoFacadeRemote;
import ejb.negocio.CatalogoFacadeRemote;
import ejemplotiendawebswing.ProductoAdmin;
import entidades.Familia;
import entidades.Producto;
import java.util.List;

/**
 *
 * @author franoliva
 */
public class ControladorGestionProducto extends ControladorGui<ProductoAdmin>{
    private ProductoFacadeRemote model;
    private CatalogoFacadeRemote catalogoFacade;
    private Producto datos;
    private boolean editando;

    private List<Familia> familias;

    public ControladorGestionProducto(ProductoAdmin gui, ProductoFacadeRemote model, CatalogoFacadeRemote catalogoFacade) {
        this(gui, model, catalogoFacade, null);
    }
    public ControladorGestionProducto(ProductoAdmin gui, ProductoFacadeRemote model, CatalogoFacadeRemote catalogoFacade, Producto prod) {
        super(gui);
        this.model = model;
        this.catalogoFacade = catalogoFacade;
        this.datos = prod;
        this.editando = prod != null;
    }
    
      @Override
    public void inicializar() {
        llenarComboFamilias();
        if (editando) {

            int indice = familias.indexOf(datos.getFamilia());
            
            gui.setDatosIniciales(datos, indice);
            gui.setTitle("Edición de producto");
        } else {
            gui.setTitle("Alta de producto");
        }
    }

    private void llenarComboFamilias() {
        familias = catalogoFacade.familias();
        gui.getComboFamilia().removeAllItems();

        for (Familia familia : familias) {
            gui.getComboFamilia().addItem(familia.getAbreviatura()+" - "+familia.getNombre());
        }
    }

    public boolean guardarDatos(String detalle, String descripcion, Double precio, Integer existencias, String marca, String modelo, int familia) {

        if (!validarCadenaVacia(detalle)) {
            mensajeError("Debe escribir un mensaje");
            return false;
        }

        if (!validarCadenaVacia(descripcion)) {
            mensajeError("Debe escribir una descripcion");
            return false;
        }

        if (precio == null || precio < 0) {
            mensajeError("Precio incorrecto");
            return false;
        }

        if (existencias == null || existencias < 0) {
            mensajeError("Existencias incorrectas");
            return false;
        }

        if (!validarCadenaVacia(marca)) {
            mensajeError("Debe escribir una marca");
            return false;
        }

        if (!validarCadenaVacia(modelo)) {
            mensajeError("Debe escribir un modelo");
            return false;
        }

        if (familia == -1) {
            mensajeError("Debe seleccionar una familia");
            return false;
        }

        Familia fam = familias.get(familia);
        if (!editando) {
            Producto prod = new Producto(descripcion, detalle, precio, existencias, marca, modelo);
            prod.setFamilia(fam);
            model.crear(prod);
        } else {
            datos.setDescripcion(descripcion);
            datos.setDetalle(detalle);
            datos.setPrecio(precio);
            datos.setExistencias(existencias);
            datos.setMarca(marca);
            datos.setModelo(modelo);
            datos.setFamilia(fam);
            model.actualizar(datos);
        }
        return true;
    }


}
